package com.example.springboot.controller;
// 导入通用返回结果类
import com.example.springboot.common.Result;
// 导入唯一ID生成工具类
import com.example.springboot.common.UID;
// 导入管理员实体类
import com.example.springboot.entity.Admin;
// 导入用户实体类（用于登录请求）
import com.example.springboot.entity.User;
// 导入管理员业务层接口
import com.example.springboot.service.AdminService;
// 导入Spring MVC注解
import org.springframework.web.bind.annotation.*;
// 导入资源注入注解
import javax.annotation.Resource;
// 导入HTTP会话对象
import javax.servlet.http.HttpSession;
/**
 * 管理员管理控制器
 * 处理管理员登录、信息更新等RESTful接口
 */
@RestController// 标记为RESTful风格的控制器，返回JSON格式数据
@RequestMapping("/admin")// 映射请求路径前缀
public class AdminController {
    // 生成唯一ID（此处声明但未使用，可能为后续功能预留）
    String uid = new UID().produceUID();
    // 注入管理员业务层实现
    @Resource// JSR-250规范的资源注入注解，等价于@Autowired
    private AdminService adminService;
    /**
     * 管理员登录接口
     *
     * @param user    登录用户信息（包含用户名和密码）
     * @param session HTTP会话对象，用于存储登录状态
     * @return 登录成功返回管理员信息，失败返回错误信息
     */

    @PostMapping("/login")// 映射POST请求：/admin/login
    public Result<?> login(@RequestBody User user,// 从JSON请求体中解析User对象
                           HttpSession session) {// 获取当前HTTP会话
        // 调用业务层验证登录
        Object o = adminService.adminLogin(user.getUsername(), user.getPassword());
        // 验证成功
        if (o != null) {
            System.out.println(o);// 打印登录成功的用户信息（生产环境建议使用日志）
            // 将用户身份和信息存入session
            session.setAttribute("Identity", "admin"); // 标记为管理员身份
            session.setAttribute("User", o); // 存储管理员对象
            return Result.success(o);// 返回成功结果及管理员信息
        } else {
            return Result.error("-1", "用户名或密码错误");// 返回登录失败信息
        }
    }

    /**
     * 更新管理员信息
     *
     * @param admin 包含更新信息的管理员对象
     * @return 更新成功返回操作结果，失败返回错误信息
     */
    @PutMapping("/update")// 映射PUT请求：/admin/update
    public Result<?> update(@RequestBody Admin admin) {// 从JSON请求体中解析Admin对象
        // 调用业务层更新方法
        int i = adminService.updateAdmin(admin);
        // 根据更新结果返回响应
        if (i == 1) {
            return Result.success();// 返回成功结果
        } else {
            return Result.error("-1", "更新失败"); // 返回失败信息
        }
    }
}
